#include<vector>
#include<string>
using namespace std;

//bool checkCol[9], checkDig1[18], checkDig2[18];
//vector<vector<string>> ret;
//vector<string> path;
//int n;
//void dfs(int row)
//{
//    if (row == n)
//    {
//        ret.push_back(path);
//        return;
//    }
//
//    for (int col = 0; col < n; col++)
//    {
//        if (!checkCol[col] && !checkDig1[col - row + n] && !checkDig2[col + row])
//        {
//            path[row][col] = 'Q';
//            checkCol[col] = checkDig1[row - col + n] = checkDig2[col + row] = true;
//            dfs(row + 1);
//            path[row][col] = '.';
//            checkCol[col] = checkDig1[row - col + n] = checkDig2[col + row] = false;
//        }
//    }
//}
//
//vector<vector<string>> solveNQueens(int _n) {
//    path.resize(_n);
//    n = _n;
//    for (int i = 0; i < n; i++)
//        path[i].append(n, '.');
//
//    dfs(0);
//    return ret;
//}

bool col[9][10], row[9][10], grep[3][3][10];
bool isValidSudoku(vector<vector<char>>& board) {
    for (int i = 0; i < 9; i++)
    {
        for (int j = 0; j < 9; j++)
        {
            if (board[i][j] != '.')
            {
                int num = board[i][j] - '0';
                if (row[i][num] || col[j][num] || grep[i / 3][j / 3][num])
                    return false;
                row[i][num] = col[j][num] = grep[i / 3][j / 3][num] = true;
            }
        }
    }
    return true;
}

int main()
{
    //solveNQueens(4);


	return 0;
}